package com.yeskery.transfer.data;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * 数据源工具类
 * @author shuangjiang.du
 * @date 2018-12-18 10:33
 * @version 1.0
 */
public class DataSourceKit {

	/**
	 * 阻塞当前线程指定的时间，以循环获取等待数据库连接，如果超过给定时间则返回null，
	 * 如果该值为小于等于0，则永远不会超时。
	 * @param dataSource 数据源对象
	 * @param waitTime 超时时间，单位为秒，如果该值为小于等于0，则永远不会超时。
	 * @return 获取的连接对象，如果超时会返回null
	 */
	public Connection getConnection(DataSource dataSource, int waitTime) throws SQLException, InterruptedException {
		long startTime = System.currentTimeMillis();
		while (true) {
			Connection connection = dataSource.getConnection();
			if (connection != null) {
				return connection;
			}
			Thread.sleep(500);
			if (waitTime > 0 && (System.currentTimeMillis() - startTime) / 1000 >= waitTime) {
				return null;
			}
		}
	}

	/**
	 * 阻塞当前线程指定的时间，以循环获取等待数据库连接。
	 * @param dataSource 数据源对象
	 * @return 获取的连接对象
	 *
	 * @see  #getConnection(DataSource, int)
	 */
	public Connection getConnection(DataSource dataSource) throws SQLException, InterruptedException {
		return getConnection(dataSource, 0);
	}
}
